module mruby.error;

import mruby.mrb_class;
import mruby.object;
import mruby.value;
import mruby.variable;
import mruby;

extern (C):

struct RException
{
	enum mrb_vtype
	{
		MRB_TT_FALSE = 0,
		MRB_TT_FREE = 1,
		MRB_TT_TRUE = 2,
		MRB_TT_FIXNUM = 3,
		MRB_TT_SYMBOL = 4,
		MRB_TT_UNDEF = 5,
		MRB_TT_FLOAT = 6,
		MRB_TT_CPTR = 7,
		MRB_TT_OBJECT = 8,
		MRB_TT_CLASS = 9,
		MRB_TT_MODULE = 10,
		MRB_TT_ICLASS = 11,
		MRB_TT_SCLASS = 12,
		MRB_TT_PROC = 13,
		MRB_TT_ARRAY = 14,
		MRB_TT_HASH = 15,
		MRB_TT_STRING = 16,
		MRB_TT_RANGE = 17,
		MRB_TT_EXCEPTION = 18,
		MRB_TT_FILE = 19,
		MRB_TT_ENV = 20,
		MRB_TT_DATA = 21,
		MRB_TT_FIBER = 22,
		MRB_TT_MAXDEFINE = 23
	}
	mrb_vtype tt;
	uint color;
	uint flags;
	RClass* c;
	RBasic* gcnext;
	iv_tbl* iv;
}

void mrb_sys_fail (mrb_state* mrb, const(char)* mesg);
mrb_value mrb_exc_new_str (mrb_state* mrb, RClass* c, mrb_value str);
mrb_value mrb_make_exception (mrb_state* mrb, int argc, const(mrb_value)* argv);
mrb_value mrb_exc_backtrace (mrb_state* mrb, mrb_value exc);
mrb_value mrb_get_backtrace (mrb_state* mrb);
void mrb_no_method_error (mrb_state* mrb, mrb_sym id, mrb_int argc, const(mrb_value)* argv, const(char)* fmt, ...);
mrb_value mrb_f_raise (mrb_state*, mrb_value);